﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using CargaDeDatos.Clases;
using MySql.Data.MySqlClient;

namespace CargaDeDatos
{
    public partial class Form1 : Form
    {
        DataSet ds = new DataSet();


        public Form1()
        {
            InitializeComponent();
        }
        
        // Boton de Carga de Grupos familiares

        private void BtnGruposFamiliares_Click(object sender, EventArgs e)
        {
            try
                {
                  CargarExcel("Afiliados");

                    OleDbDataReader rd = CargarExcel("Afiliados");
                        while (rd.Read())
                        {

                            string codigo = rd[0].ToString();

                            // Controlo que sea un titular
                            if (Clases.herramientas.ReverseString(codigo).Remove(2) == "00")
                            {
                                string Departamento = SeleccionarDepartamento(rd[5].ToString());

                                string plan = CodigoDePlan(rd[4].ToString(), Departamento);
                                
                                string  IdGrupoFamiliarViejo = codigo.Remove(codigo.Length - 2);

                                // Inserto los datos en la BD
                                string queryGF = "insert into gruposfamiliares (plan) values (" + plan + ");";
                                ejecutar TitularesObject = new ejecutar();
                                MySqlDataReader titulares = TitularesObject.EjecutarSQL(queryGF);

                                TitularesObject.cerrar();

                                String queryaux = "REPLACE into gfaux values (" + IdGrupoFamiliarViejo + ",(SELECT MAX( idGrupoFamiliar ) FROM gruposfamiliares))";
                                ejecutar GFauxObject = new ejecutar();
                                MySqlDataReader GfAUX = GFauxObject.EjecutarSQL(queryaux);

                                GFauxObject.cerrar();
                            }

                        }

                    MessageBox.Show("Grupos Familiares cargados");
                }

                catch ( Exception x)
                {
                    MessageBox.Show(x.ToString());
                }
        }



        private void Form1_Load(object sender, EventArgs e)
        {
            CBEmpresa.Items.Add("Sistema Medico");
            CBEmpresa.Items.Add("Unimedica");

            openFileDialog1.Filter = "Excel(*.xlsx)|*.xlsx";
            openFileDialog1.FileName = "";
            openFileDialog1.ShowDialog();
           
        }


        public string CodigoDePlan (string NumeroPlan,string Departamento)
        {
            if (NumeroPlan == "" || NumeroPlan == "0")
                {  return "1"; }
                else
                {

                    String queryPlan = "select idPlan from planes where numeroPlan = " + NumeroPlan + " and Departamento = " + Departamento;
                    ejecutar PlanObeject = new ejecutar();
                    MySqlDataReader Planes = PlanObeject.EjecutarSQL(queryPlan);

                    if (Planes.HasRows)
                    {
                        Planes.Read();
                        return  Planes.GetString("idPlan");
                    }
                    else
                    {
                        return "1";
                    }
                 }
        }

        // Selecciona la empresa a la que corresponde el departamento

        public string SeleccionarDepartamento(string departamento)
        {
            String queryDepto = "select IdDepartamentos from departamentos where nombre = '" + departamento +"';";
            ejecutar DeptoObeject = new ejecutar();
            MySqlDataReader Depto = DeptoObeject.EjecutarSQL(queryDepto);

            if (Depto.HasRows)
            {
                Depto.Read();
                return Depto.GetString("IdDepartamentos");
            }
            else
            {
                return "10";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {

            try
            {
               OleDbDataReader rd = CargarExcel("Profesionales");
 

                while (rd.Read())
                {
                    
                    // Extraigo los datos de la fila

                    string codigo = rd[0].ToString();
                    string nombre = Clases.herramientas.RecortarString(rd[1].ToString());
                    int especialidad = CargarEspecialidad(rd[3].ToString());
                    int carrera = CargarCarrera(Convert.ToInt32(rd[2].ToString()), especialidad);
                    int? carreraDif = CargarCarreraDif(carrera);

                    string carreraDifString = "null";
                    if ( carreraDif != null) 
                    { carreraDifString = carreraDif.ToString();}


                    string Planes = rd[5].ToString();

                    // Inserto el profesional
                    String queryProf = "insert into profesionales (matricula,nombre,carrera,carreraDiferencial,especialidad) values ('" + codigo + "','" + nombre + "'," + carrera + "," + carreraDifString + "," + especialidad + ");";
                    ejecutar ProfObject = new ejecutar();
                    MySqlDataReader Profesionales = ProfObject.EjecutarSQL(queryProf);

                    ProfObject.cerrar();

                    // Cargo los planes que trabaja el profesional

                    CargarPlanProf(Planes);

                }

                MessageBox.Show("Profesionales cargados");
            }
            catch(Exception x)
            {
                MessageBox.Show(x.ToString());
            }
        }

        private void BtnAfiliados_Click(object sender, EventArgs e)
        {
            
               try
                {
                    
                   OleDbDataReader rd = CargarExcel("Afiliados");
                                                
                     while (rd.Read())
                    {
                                              
                        // Extraigo los datos de la fila

                        string codigo = rd[0].ToString();

                        string nombre = "";
                        string apellido = "";

                        if (CBEmpresa.Text == "Unimedica")
                        {
                            nombre = Clases.herramientas.RecortarString(rd[1].ToString());
                            apellido = Clases.herramientas.RecortarString(rd[2].ToString());
                        }
                        else
                        {
                            nombre = Clases.herramientas.CortarNombre(rd[2].ToString());
                            apellido = Clases.herramientas.CortarApellido(rd[2].ToString());
                        }

                        string dni = rd[3].ToString();

                        string parentesco =  Convert.ToString(Convert.ToInt32(codigo.Remove(0, codigo.Length - 2)) + 10);

                        if (Convert.ToInt32(parentesco) > 60)
                        {
                            parentesco = "1";
                        }

                        string grupofamiliar = CargarGF(codigo.Remove(codigo.Length - 2));

                        string FechaNac = rd[6].ToString();

                        if (FechaNac.Length < 5)
                        {
                            FechaNac = "0000-00-00";
                        }
                        else
                        {
                            FechaNac = Clases.herramientas.FechaNacAfil(FechaNac);
                        }


                        // Inserto el Afiliado
                        string queryGF = "insert into afiliados (grupofamiliar,apellido,nombre,documento,parentesco,fechaNacimiento) values (" + grupofamiliar + ",'" + apellido + "','" + nombre + "','" + dni + "'," + parentesco + ",'" + FechaNac +"');";

                        ejecutar TitularesObject = new ejecutar();
                        MySqlDataReader titulares = TitularesObject.EjecutarSQL(queryGF);

                        TitularesObject.cerrar();

                        // Inserto el afiliado auxiliar

                        String QueryAfilAux = "REPLACE into afilaux values (" + codigo + ",(SELECT MAX( idAfiliado ) FROM afiliados))";
                        ejecutar AfilAuxObject = new ejecutar();
                        MySqlDataReader AfilAux = AfilAuxObject.EjecutarSQL(QueryAfilAux);

                    }

                    MessageBox.Show("Afiliados cargados");

                }

                catch (Exception x)
                {
                    MessageBox.Show(x.ToString());
                }
        }


        // Obtengo el Id de Grupo Familiar

        public string CargarGF(String Codigo)
        {
            string queryGFAux = "select idGFNuevo from gfaux where idGFViejo = " + Codigo;
            ejecutar GFAuxbject = new ejecutar();
            MySqlDataReader GFAUX = GFAuxbject.EjecutarSQL(queryGFAux);

            if (GFAUX.HasRows)
            {
                GFAUX.Read();
                return  GFAUX.GetString("idGFNuevo");
            }
            else
            {
                return "1";
            }

        }


        // Obtengo las especialidades
        public int CargarEspecialidad(string EspecialidadProf)
        {
            int Especialidad = 1;

            switch (EspecialidadProf)
            {
                    case "ACOMPAÑANTE TERAPEUTICO": Especialidad = 56;
                        break;
                    case "ALERGIA": Especialidad = 10;
                        break;
                    case "ANESTESIOLOGIA": Especialidad = 11;
                        break;
                    case "ANESTESISTA": Especialidad = 11;
                        break;
                    case "BIOQUIMICO": Especialidad = 12;
                        break;
                    case "BIOQUIMICA": Especialidad = 12;
                        break;
                    case "CARDIOLOGIA": Especialidad = 13;
                        break;
                    case "CIRUGIA": Especialidad = 14;
                        break;
                    case "CIRUGIA GENERAL": Especialidad = 15;
                        break;
                    case "CIRUGIA VASCULAR": Especialidad = 49;
                        break;
                    case "CLINICA MEDICA": Especialidad = 16;
                        break;
                    case "CLINICA": Especialidad = 16;
                        break;
                    case "CLINICA MEDICA-TERAPISTA": Especialidad = 17;
                        break;
                    case "DERMATOLOGIA": Especialidad = 18;
                        break;
                    case "DIABETOLOGIA": Especialidad = 59;
                        break;
                    case "ECOGRAFIA": Especialidad = 29;
                        break;
                    case "ECOGRAFISTA": Especialidad = 29;
                        break;
                    case "ENDOCRINOLOGIA": Especialidad = 20;
                        break;
                    case "ENFERMERIA": Especialidad = 21;
                        break;
                    case "FLEBOLOGIA": Especialidad = 22;
                        break;
                    case "FONOAUDIOLOGIA": Especialidad = 23;
                        break;
                    case "GASTROENTEROLOGIA": Especialidad = 24;
                        break;
                    case "GERIATRIA": Especialidad = 26;
                        break;
                    case "GINECOLOGIA Y OBSTETRICIA": Especialidad = 27;
                        break;
                    case "GINECOLOGIA": Especialidad = 27;
                        break;
                    case "HEMATOLOGIA": Especialidad = 28;
                        break;
                    case "DIAGNOSTICO X IMAGENES": Especialidad = 29;
                        break;
                    case "INTERPRESTADORES": Especialidad = 63;
                        break;
                    case "KINESIOLOGIA": Especialidad = 30;
                        break;
                    case "MAMOGRAFIA": Especialidad = 31;
                        break;
                    case "MEDICINA GENERAL": Especialidad = 32;
                        break;
                    case "MEDICO": Especialidad = 32;
                        break;
                    case "CLINICO": Especialidad = 32;
                        break;
                    case "MEDICINA RURAL": Especialidad = 33;
                        break;
                    case "MEDICINA NUCLEAR": Especialidad = 61;
                        break;
                    case "MUSICOTERAPEUTA": Especialidad = 60;
                        break;
                    case "NEFROLOGIA": Especialidad = 34;
                        break;
                    case "NEUMONOLOGIA": Especialidad = 35;
                        break;
                    case "NEUROLOGIA": Especialidad = 36;
                        break;
                    case "NUTRICIONISTAS": Especialidad = 38;
                        break;
                    case "NUTRICIONISTAS-DIETISTAS": Especialidad = 38;
                        break;
                    case "OBSTETRICAS LIC.": Especialidad = 39;
                        break;
                    case "ODONTOLOGIA": Especialidad = 40;
                        break;
                    case "OFTALMOLOGIA": Especialidad = 41;
                        break;
                    case "ONCOLOGIA": Especialidad = 42;
                        break;
                    case "ONCOLOGO": Especialidad = 42;
                        break;
                    case "OTORRINOLARINGOLOGIA": Especialidad = 43;
                        break;
                    case "OTORINO": Especialidad = 43;
                        break;
                    case "PATOLOGIA": Especialidad = 44;
                        break;
                    case "PATOLOGO": Especialidad = 44;
                        break;
                    case "PEDIATRIA": Especialidad = 45;
                        break;
                    case "PODOLOGIA": Especialidad = 46;
                        break;
                    case "PSICOLOGIA": Especialidad = 47;
                        break;
                    case "PSICOPEDAGOGIA": Especialidad = 48;
                        break;
                    case "PSIQUIATRIA": Especialidad = 49;
                        break;
                    case "RADIOLOGIA": Especialidad = 29;
                        break;
                    case "REUMATOLOGIA": Especialidad = 51;
                        break;
                    case "SANATORIOS": Especialidad = 52;
                        break;
                    case "SANATORIAL": Especialidad = 52;
                        break;
                    case "TOCOGINECOLOGIA": Especialidad = 53;
                        break;
                    case "TOMOGRAFIA": Especialidad = 54;
                        break;
                    case "TRAUMATOLOGIA Y ORTOPEDIA": Especialidad = 55;
                        break;
                    case "TRAUMATOLOGIA": Especialidad = 55;
                        break;
                    case "UROLOGIA": Especialidad = 56;
                        break;
                    case "UROLOGO": Especialidad = 56;
                        break;
                    case "VASCULAR": Especialidad = 57;
                        break;
                    case "": Especialidad = 1;
                        break;
                    default: Especialidad = 1;
                        break;
                }

            return Especialidad;
        }

        // Carga las carreras medicas
        public int CargarCarrera(int Carrera, int Especialidad)
        {
            if (Carrera == 0)
            {
                Carrera = 1;
            }

            // Controlo los sanatorios
            if (Especialidad == 44)
            {

                Carrera = Carrera + 6;
            }

            return Carrera;
        }

        //Cargo las carreras diferenciales
        public int? CargarCarreraDif(int Carrera)
        {
            int? CarreraDiferencial = null;

            // Asigno las carreras diferenciales
            if ((Carrera > 4) || (Carrera > 10))
            {
                switch (Carrera)
                {
                    case 5: CarreraDiferencial = 5;
                        Carrera = 4;
                        break;
                    case 6: CarreraDiferencial = 6;
                        Carrera = 4;
                        break;
                    case 11: CarreraDiferencial = 5;
                        break;
                    case 12: CarreraDiferencial = 6;
                        break;
                }
            }

            return CarreraDiferencial;
        }

        

        // Cargar los planes que trabaja el medico

        public void CargarPlanProf(string Planes)
        {
            try
            {
                List<string> PlanesConvertidos = new List<string>();

                if (Planes != "")
                {
                    char[] delimiterChars = { ',' };
                    Planes = PuntoToComa(Planes);
                    string[] ListaDePlanes = Planes.Split(delimiterChars);

                   

                    foreach (string plan in ListaDePlanes)
                    {
                        if (plan != "")
                        {
                            // Convierto a Int para sacarle el 0 de adelante
                            int planInt = Convert.ToInt32(plan);

                            string planString = planInt.ToString();

                            PlanesConvertidos.Add(planString);
                        }

                    }
                }

                // Cargo los planes en la BD

                ejecutar PlanesObject = new ejecutar();
                MySqlDataReader ListadoPlanes = PlanesObject.EjecutarSQL("Call listadoPlanes()");

                string queryPlan = "";
                

                while (ListadoPlanes.Read())
                {
                    bool ExistePlan = false;

                    String Plan = ListadoPlanes.GetString("Plan");
                    String PlanNum = ListadoPlanes.GetString("Numero");

                    // Busco si el plan existe en el listado de planes que el prof NO TRABAJA

                    foreach (string planN in PlanesConvertidos)
                    {
                        if (string.Compare(PlanNum, planN) == 0)
                        {
                            ExistePlan = true;
                        }
                    }

                    if (ExistePlan == false)
                    {
                        queryPlan = queryPlan + "insert into profplanes values ((SELECT MAX(idProfesional) FROM profesionales)," + Plan + "); ";
                    }

                }

                ejecutar InsertarProfPlanObject = new ejecutar();
                MySqlDataReader InsertarProfPlan = InsertarProfPlanObject.EjecutarSQL(queryPlan);

                InsertarProfPlanObject.cerrar();
                PlanesObject.cerrar();

            }

            catch ( Exception x)
            {
                MessageBox.Show(x.ToString());
            }
        }
  

        // Pasa de . a ,
        public static string PuntoToComa(String strToEsc)
        {
            if (strToEsc.IndexOf(".") > -1)
            {
                strToEsc = strToEsc.Replace(".", @",");
            }
            return strToEsc;

        }

        // Cargo los datos del excel
        public OleDbDataReader CargarExcel(string hoja)
        {
            string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFileDialog1.FileName + ";Extended Properties='Excel 12.0 Xml;HDR=YES'";

                OleDbConnection oledbConn = new OleDbConnection(connString);

                

                    // Create OleDbCommand object and select data from worksheet Sheet1
                    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + hoja + "$]", oledbConn);

                    oledbConn.Open();

                    OleDbDataReader odr = cmd.ExecuteReader();

                    return odr;

                    // Create new OleDbDataAdapter 
                   // OleDbDataAdapter oleda = new OleDbDataAdapter();

                    //oleda.SelectCommand = cmd;

                   
                    // Fill the DataSet from the data extracted from the worksheet.
                    //oleda.Fill(ds, hoja);

                    // Bind the data to the GridView

                //   dataGridView1.DataSource = ds.Tables[0].DefaultView;

                   // oledbConn.Close();
        }

        private void BtnPlanes_Click(object sender, EventArgs e)
        {
            // Cargo los planes del excel

             OleDbDataReader rd = CargarExcel("Plan");
                     
                            
            while (rd.Read())
            {
                string PlanNum = rd[0].ToString();
                string Siglas = rd[1].ToString();
                string Departamento = rd[2].ToString();
                string Empresa = rd[3].ToString();
 

                bool existeplan = ExistePlan(PlanNum, Departamento);

                if (existeplan == false)
                {
                    // Inserto el Plan
                    string queryPlan = "insert into planes (numeroPlan,siglas,empresa,Departamento) Values ('" + PlanNum + "','" + Siglas + "'," + Empresa + "," + Departamento + ");";
                    ejecutar InsPlanesObject = new ejecutar();
                    MySqlDataReader InsertarPlanes = InsPlanesObject.EjecutarSQL(queryPlan);

                     InsPlanesObject.cerrar();
                }
            }

            MessageBox.Show("Planes Cargados");
         
        }

        public bool ExistePlan(string PlanNum,string Departamento)
        {
            // Consulto todos los planes existentes en la BD
            bool existe = false;
            ejecutar PlanesObject = new ejecutar();
            MySqlDataReader ListadoPlanes = PlanesObject.EjecutarSQL("Call listadoPlanes()");

            while (ListadoPlanes.Read())
            {

                // Extraigo Numero y empresa del plan
                String PlanDB = ListadoPlanes.GetString("Numero");
                String DepartamentoDB = ListadoPlanes.GetString("Departamento");

                if (string.Compare(PlanDB, PlanNum) == 0 & string.Compare(Departamento, DepartamentoDB) == 0)
                {
                    existe = true;

                }

            }

            PlanesObject.cerrar();
           return existe;
        }

        private void BtnCambiarEmpresa_Click(object sender, EventArgs e)
        {
            switch (CBEmpresa.Text)
            {
                case "Unimedica": Properties.Settings.Default.db = "unimedica";
                    Properties.Settings.Default.Save();
                    break;
                case "Sistema Medico": Properties.Settings.Default.db = "sm";
                    Properties.Settings.Default.Save();
                    break;
            }
        }
    }
}
